package ru.ipo.dces.pluginapi;

import ru.ipo.dces.debug.PersistentStorage;
import ru.ipo.dces.exceptions.GeneralRequestFailureException;
import ru.ipo.dces.log.LogMessageType;
import ru.ipo.problemsapi.ExtendedProblem;

import javax.swing.*;
import java.io.Serializable;
import java.util.HashMap;
import java.util.LinkedList;

/**
 * Интерфейс, через который Plugin'ы обращаются к основной части клиента.
 * Окружение Plguin'а, которое соответствует одному Plugin'у
 */
public interface PluginEnvironment {

    // Системные плагины (не задачи) можно реализовать самим и не отдавать
    // третьей стороне. Если третья сторона захочет писать системные плагины, в
    // api надо будет добавить методы

    /**
     * Установить текст на кнопке определенного Plugin'а
     *
     * @param title the title to set
     */
    void setTitle(String title);

    /**
     * Sends information to the server-side plugin
     *
     * @param solution information to send
     * @throws ru.ipo.dces.exceptions.GeneralRequestFailureException if the server is inaccessible
     */
    void submitSolution(HashMap<String, String> solution) throws GeneralRequestFailureException;

    /**
     * Returns problem to work with, the problem is decorated with useful methods to work with
     *
     * @return a problem
     */
    ExtendedProblem getProblem();

    /**
     * Creates JComponent that displays problem statement
     *
     * @return newly created component to display statement
     */
    JComponent getStatementPanel();

    PersistentStorage getStorage();

//    void log(String message, LogMessageType type);
}
